package com.huahua.interceptor.handler;

import com.huahua.annotation.Authority;
import com.huahua.entity.User;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

import java.util.List;

/**
 * 权限处理器
 *
 * @author huahua
 */
@Component("authorityProcess")
public class AuthorityHandlerProcess {
    //读取yaml配置文件配置的各个拦截器handler，可以自定义或者从其他地方读取
    @Value("#{'${requirement.handler}'.split(',')}")
    private List<String> handlers;

    public void process(User user, Authority authority) throws Exception{
        // 如果想要实时的进行顺序的调整或者是增减。那必须要使用配置中心进行配置。
        // 比如springcloud里边自带的config的配置中心,applo 配置中心。
        for(String handler : handlers) {
            //forName要包含包名和类名，不然就会报 ClassNotFoundException 错误，因为通过反射实例化类时传递的类名称必须是全路径名称
            AbstractAuthorityHandler handle =
                    (AbstractAuthorityHandler) Class.forName(handler).newInstance();
            handle.processHandler(user, authority);
        }
    }
}